
package w83a.w83aManager;


import java.util.Date;

import w83a.w83aBeans.W83AUsuarioBean;
import w83a.w83aBeans.W83aNotificacionesBean;
import w83a.w83aUtilidadesComunes.W83ADateUtils;
import w83a.w83aUtilidadesComunes.W83AInformacionProcedimiento;
import w83a.w83aUtilidadesComunes.W83AProperties;
import w83a.w83aUtilidadesComunes.W83ASolicitudPreaviso;
import w83a.w83aUtilidadesComunes.W83aClsConstantes;
import w83a.w83aUtilidadesComunes.W83aClsTrazas;
import w83a.w83aUtilidadesComunes.W83aException;

public class W83AWebServiceutils {//NOPMD
	
	public W83AWebServiceutils (){
		
	}
	
	public static String generarNotificationCreateTask(String procedureId, W83AInformacionProcedimiento info, W83aNotificacionesBean infoNotificacion,  W83AUsuarioBean sindicato, W83ASolicitudPreaviso preaviso,String direccionEnvio, String rutaFichero, String idioma)throws W83aException{//NOPMD
		
		String resultado = "";
		W83AUsuarioBean Usuario=sindicato;
		String territorio=preaviso.getTerritorioCabecera();
		String codSindicato=preaviso.getSindicato();
		String descSindicato=sindicato.getDescSindi();
		try {
			String year = W83ADateUtils.getCurrentYear();
			String textoNotif = "";

			String cadenaSindicatos=descSindicato;
			W83aClsTrazas.trazaDebug(null,"codSindicato"+codSindicato+"===cadenaSindicatos:"+cadenaSindicatos);
			
			String nombreFichero = infoNotificacion.getNombreFichero().substring(0, infoNotificacion.getNombreFichero().length()-4);
			
			Date fecha = new Date();
            String fechaS=W83ADateUtils.dateTimeToString(fecha);			
			StringBuffer textoNotifIda = new StringBuffer(W83aClsConstantes.TRESCIENTOS);
			StringBuffer textoNotifVuelta = new StringBuffer(W83aClsConstantes.TRESCIENTOS);
			
			if (W83aClsConstantes.CONSTANTE_CASTELLANO.equals(idioma)){
				textoNotifIda.append("Con la presente comunicación se notifica que ");
				textoNotifIda.append(infoNotificacion.getNombreUsuarioEmisor()).append(" ").append(infoNotificacion.getApellido1UsuarioEmisor()).append(" ").append(infoNotificacion.getApellido2UsuarioEmisor()).append(" en representación del sindicado ");
				textoNotifIda.append(infoNotificacion.getSindicatoUsuarioEmisor()).append(" del territorio ").append(Usuario.getDescTerritorio());
				textoNotifIda.append(" ha dado de alta en la fecha ").append(fechaS);
				textoNotifIda.append(" el fichero de preavisos de elecciones sindicales con nombre ").append(nombreFichero).append(" adjunto a esta comunicación");
				
				textoNotifVuelta.append("Con la presente comunicación se notifica que el fichero de lote de preavisos ");
				textoNotifVuelta.append(nombreFichero).append(" ha sido revisado y validado por la administración pública. Dicho lote fue enviado por ");
				textoNotifVuelta.append(infoNotificacion.getNombreUsuarioEmisor()).append(" ").append(infoNotificacion.getApellido1UsuarioEmisor()).append(" ").append(infoNotificacion.getApellido2UsuarioEmisor()).append(" en representación del sindicato ");
				textoNotifVuelta.append(infoNotificacion.getSindicatoUsuarioEmisor()).append(" del territorio ").append(Usuario.getDescTerritorio()).append(" en la fecha ");
				textoNotifVuelta.append(fechaS);
			}
			else{
				textoNotifIda.append("Idazki honen bidez jakinarazten da ");
				textoNotifIda.append(infoNotificacion.getNombreUsuarioEmisor()).append(" ").append(infoNotificacion.getApellido1UsuarioEmisor()).append(" ").append(infoNotificacion.getApellido2UsuarioEmisor()).append(" jaunak/andreak, ");
				textoNotifIda.append(Usuario.getDescTerritorio()).append(" lurraldeko ").append(infoNotificacion.getSindicatoUsuarioEmisor()).append(" sindikatuaren ordezkari den aldetik, ");
				textoNotifIda.append(nombreFichero).append(" izeneko hauteskunde sindikalen aurreabisuen fitxategia altan eman duela ");
				textoNotifIda.append(fechaS).append("(e)(a)n (jakinarazpen honi atxiki).");
				
				
				textoNotifVuelta.append("Idazki honen bidez jakinarazten da aurreabisu-lotearen ");
				textoNotifVuelta.append(nombreFichero);
				textoNotifVuelta.append(" fitxategia berrikusi eta baliozkotu duela herri-administrazioak.  ");
				textoNotifVuelta.append(Usuario.getDescTerritorio());
				textoNotifVuelta.append(" lurraldeko ");
				textoNotifVuelta.append(infoNotificacion.getSindicatoUsuarioEmisor()); 
				textoNotifVuelta.append(" sindikatuaren ordezkari gisa bidali zuen aipatu lote hori ");
				textoNotifVuelta.append(infoNotificacion.getApellido1UsuarioEmisor()).append(" ").append(infoNotificacion.getApellido1UsuarioEmisor()).append(" ").append(infoNotificacion.getNombreUsuarioEmisor()); 
				textoNotifVuelta.append(" jaunak/andreak,  ");
				textoNotifVuelta.append(fechaS); 
				textoNotifVuelta.append("(e)(a)n.");
			}
			
			if (direccionEnvio.equals(W83aClsConstantes.IDA)){
				textoNotif=textoNotifIda.toString();
			}else{
				textoNotif=textoNotifVuelta.toString();
			}
			W83aClsTrazas.trazaDebug(null,"textoNotif: "+ textoNotif);
			
			
			String auditUser = infoNotificacion.getDniXLNET()+"#"+infoNotificacion.getNameXLNET();
			W83aClsTrazas.trazaDebug(null,"auditUser: "+ auditUser);//NOPMD
			
			String valueSerie = "";
			if(territorio.equals(W83aClsConstantes.CONSTANTE_ALAVA)){
				valueSerie=W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_serie.araba");
		    }else if(territorio.equals(W83aClsConstantes.CONSTANTE_GIPUZKOA)){
		    	valueSerie=W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_serie.gipuzkoa");
		    }else if(territorio.equals(W83aClsConstantes.CONSTANTE_BIZKAIA)){
		    	valueSerie=W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_serie.bizkaia");
		    }
			W83aClsTrazas.trazaDebug(null,"valueSerie: "+ valueSerie);
			
			
			String nombreFicheroPif = rutaFichero.substring(11,rutaFichero.length());
			W83aClsTrazas.trazaDebug(null,"nombreFicheroPif: "+ nombreFicheroPif);
			

			if(infoNotificacion.getIdDocusi()==null || infoNotificacion.getIdDocusi().equals("")){
				resultado="<notificationCreateTask>"
				    +"<procedureID>"+procedureId+"</procedureID>"
				    +"<procedureName>"+info.getNombreProcedimiento("es")+"</procedureName>"
				    +"<departmentID>"+info.getIdDepartamento()+"</departmentID>"
				    +"<departmentName>"+info.getNombreDepartamento("es")+"</departmentName>"
				    +"<managementUnitID>"+info.getIdOrganoGestor()+"</managementUnitID>"
				    +"<managementUnitName>"+info.getNombreOrganoGestor("es")+"</managementUnitName>"
				    +"<organizationID>"+info.getIdEntidad()+"</organizationID>"
				    +"<year>"+year+"</year>"
				    +"<folderNumber>"+nombreFichero+"</folderNumber>"
				    +"<notifiedActID>"+"COMUNICATION"+"</notifiedActID>"
				    +"<notifiedActName>"+"Comunicación"+"</notifiedActName>"
				    +"<addresseeID>"+sindicato.getDniUsuario()+"</addresseeID>"
				    +"<addresseeName>"+sindicato.getNombreUsuario()+"</addresseeName>"
				    +"<notificationLanguage>"+"es"+"</notificationLanguage>"
				    +"<notificationText>"+textoNotif+"</notificationText>"
				    +"<senderID>"+infoNotificacion.getDniXLNET()+"</senderID>"
				    +"<senderName>"+infoNotificacion.getNameXLNET()+"</senderName>"
				    +"<noticesList>"+generarNotices(sindicato)+"</noticesList>"
				    +"<auditUser>"+auditUser+"</auditUser>"
				    +"<daDocumentalSeries>"+valueSerie+"</daDocumentalSeries>"
				    +"<daProcedureID>"+info.getDaProcedureId()+"</daProcedureID>"
				    +"<attachmentsList>" +
				    		"<attachment>" +
				    		"<referenceDocument>"+rutaFichero+"</referenceDocument>" +
				    		"<documentExtension>txt</documentExtension>" +
				    		"<documentRolID>ejgv_d_nota.0.0</documentRolID>"+
				    		"<documentRolName xsi:type='xs:string' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" +
				    		"	<description>" +
				    		"		<language locale='es'>Lote</language>" +
				    		"		<language locale='eu'>Lotea</language>" +
				    		"	</description>" +
				    		"</documentRolName>" +
				    		"<isInputDocument>E</isInputDocument>" +
				    		"<documentName>"+nombreFicheroPif+"</documentName>" +
				    		"<naturaleza>ELECTRONICO</naturaleza>" +
				    		"<senderId>"+infoNotificacion.getDniXLNET()+"</senderId><senderName>"+infoNotificacion.getNameXLNET()+"</senderName>" +
				    		"<title>Lote de preavisos</title>"
			      	+"</attachment></attachmentsList>"
			      	+"<signatureType>"+"xades"+"</signatureType>"
				    +"<signType>"+"SERVIDOR"+"</signType>"
				    +"</notificationCreateTask>";
		    }else{
		    	resultado="<notificationCreateTask>"
				    +"<procedureID>"+procedureId+"</procedureID>"
				    +"<procedureName>"+info.getNombreProcedimiento("es")+"</procedureName>"
				    +"<departmentID>"+info.getIdDepartamento()+"</departmentID>"
				    +"<departmentName>"+info.getNombreDepartamento("es")+"</departmentName>"
				    +"<managementUnitID>"+info.getIdOrganoGestor()+"</managementUnitID>"
				    +"<managementUnitName>"+info.getNombreOrganoGestor("es")+"</managementUnitName>"
				    +"<organizationID>"+info.getIdEntidad()+"</organizationID>"
				    +"<year>"+year+"</year>"
				    +"<folderNumber>"+nombreFichero+"</folderNumber>"
				    +"<notifiedActID>"+"COMUNICATION"+"</notifiedActID>"
				    +"<notifiedActName>"+"Comunicación"+"</notifiedActName>"
				    +"<addresseeID>"+sindicato.getDniUsuario()+"</addresseeID>"
				    +"<addresseeName>"+sindicato.getNombreUsuario()+"</addresseeName>"
				    +"<notificationLanguage>"+"es"+"</notificationLanguage>"
				    +"<notificationText>"+textoNotif+"</notificationText>"
				    +"<senderID>"+infoNotificacion.getDniXLNET()+"</senderID>"
				    +"<senderName>"+infoNotificacion.getNameXLNET()+"</senderName>"
				    +"<noticesList>"+generarNotices(sindicato)+"</noticesList>"
				    +"<auditUser>"+auditUser+"</auditUser>"
				    +"<daDocumentalSeries>"+valueSerie+"</daDocumentalSeries>"
				    +"<daProcedureID>"+info.getDaProcedureId()+"</daProcedureID>"
				    +"<attachmentsList>" +
		    		"<attachment>" +
		    		"<referenceDocument>"+rutaFichero+"</referenceDocument>" +
		    		"<documentExtension>txt</documentExtension>" +
		    		"<documentRolID>ejgv_d_nota.0.0</documentRolID><documentRolName>"+
		    		"<documentRolName xsi:type='xs:string' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><description><language locale='es'>Nota</language><language locale='eu'>Oharra</language></description></documentRolName>" +
		    		"<isInputDocument>E</isInputDocument>" +
		    		"<documentName>"+nombreFicheroPif+"</documentName>" +
		    		"<naturaleza>ELECTRONICO</naturaleza>" +
		    		"<senderId>"+infoNotificacion.getDniXLNET()+"</senderId><senderName>"+infoNotificacion.getNameXLNET()+"</senderName>" +
		    		"<title>Lote de preavisos</title>"
			      	+"</attachment></attachmentsList>"
			      	+"<signatureType>"+"xades"+"</signatureType>"
				    +"<signType>"+"SERVIDOR"+"</signType>"
				    +"</notificationCreateTask>";
		    }
			W83aClsTrazas.trazaDebug(null,"----FIN DE notificationCreateTask --- " );
		} catch (Exception e) {
			throw new W83aException("Error al generar el objeto notificationCreateTask.");
		}
		
		return resultado;
	}
	
	
	
	public static String generarAttachment(String idDocusi, String nombreFichero,String territorio,String direccionEnvio)throws W83aException{
		String resultado = "";
		
		try {
			String valueTitle = "";
			String entradaSalida="";
			if(territorio.equals(W83aClsConstantes.CONSTANTE_ALAVA)){
				valueTitle= W83AProperties.getProperty("w83a","dokusi.attributeList.value.title.araba");
		    }else if(territorio.equals(W83aClsConstantes.CONSTANTE_GIPUZKOA)){
		    	valueTitle= W83AProperties.getProperty("w83a","dokusi.attributeList.value.title.gipuzkoa"); 
		    }else if(territorio.equals(W83aClsConstantes.CONSTANTE_BIZKAIA)){
		    	valueTitle= W83AProperties.getProperty("w83a","dokusi.attributeList.value.title.bizkaia");
		    }
	
			if (direccionEnvio.equals(W83aClsConstantes.IDA)){
				entradaSalida=W83aClsConstantes.ENTRADA;
			}else{
				entradaSalida=W83aClsConstantes.SALIDA;
			}
			
			resultado="<attachment>"
				    +"<documentOID>"+idDocusi+"</documentOID>"
				    +"<documentExtension>"+"txt"+"</documentExtension>"
				    +"<documentRolID>"+W83AProperties.getProperty("w83a","dokusi.tipoDocumental")+".0.0</documentRolID>"
				    +"<documentRolName>"
						+ "<description>"
							+ "<language locale='eu'>"+"Planoa"+"</language>"
							+ "<language locale='es'>"+"Plano"+"</language>"
						+ "</description>"
				    +"</documentRolName>"
				    +"<isInputDocument>"+entradaSalida+"</isInputDocument>"
				    +"<documentName>"+nombreFichero+"</documentName>"
				    +"<title>"+valueTitle+"</title>"
				    +"<naturaleza>"+"ELECTRONICO"+"</naturaleza>"
				    +"<support>"+"FALSE"+"</support>"
				   
			    +"</attachment>";
		} catch (Exception e) {
			throw new W83aException("Error al generar el attachment de notificación.");
		}
		
		return resultado;
	}
	public static String generarNotices(W83AUsuarioBean sindicato)throws W83aException{
		String resultado = "";
		
		try {
			
			if(sindicato.getTelefono()==null || sindicato.getTelefono().equals("")){
				resultado="<notice>"
				    +"<addresseID>"+sindicato.getDniUsuario()+"</addresseID>"
				    +"<addresseName>"+sindicato.getNombreUsuario()+"</addresseName>"
				    +"<channelType>"+"1"+"</channelType>"
				    +"<channelInfo>"
						+ "<emailAddress>"+sindicato.getMail()+"</emailAddress>"
				    +"</channelInfo>"
			    +"</notice>";
			}else{
				resultado="<notice>"
				    +"<addresseID>"+sindicato.getDniUsuario()+"</addresseID>"
				    +"<addresseName>"+sindicato.getNombreUsuario()+"</addresseName>"
				   // +"<addresseID>77100095R</addresseID>"
				   // +"<addresseName>ARKAITZ GORRIZ</addresseName>"
				    +"<channelType>"+"2"+"</channelType>"
				    +"<channelInfo>"
						+ "<smsNumber>"+sindicato.getTelefono()+"</smsNumber>"
				    +"</channelInfo>"
			    +"</notice>"
			    +"<notice>"
				    +"<addresseID>"+sindicato.getDniUsuario()+"</addresseID>"
				    +"<addresseName>"+sindicato.getNombreUsuario()+"</addresseName>"
			    //+"<addresseID>77100095R</addresseID>"
			    //+"<addresseName>ARKAITZ GORRIZ</addresseName>"
				    +"<channelType>"+"1"+"</channelType>"
				    +"<channelInfo>"
						+ "<emailAddress>"+sindicato.getMail()+"</emailAddress>"
				    +"</channelInfo>"
			    +"</notice>";
			}
			
		} catch (Exception e) {
			throw new W83aException("Error al generar el attachment de notificación.");
		}
		
		return resultado;
	}
	
	public static String generarAttributeList(String nombreFichero, W83ASolicitudPreaviso solicitudPreaviso,String idDepartamento)throws W83aException{
		String resultado = "";
		
		try {
			String valueTitle = "";
			String valueSerie = "";
			if(solicitudPreaviso.getTerritorioCabecera().equals(W83aClsConstantes.CONSTANTE_ALAVA)){
				valueTitle= W83AProperties.getProperty("w83a","dokusi.attributeList.value.title.araba");
				valueSerie=W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_serie.araba");
		    }else if(solicitudPreaviso.getTerritorioCabecera().equals(W83aClsConstantes.CONSTANTE_GIPUZKOA)){
		    	valueTitle= W83AProperties.getProperty("w83a","dokusi.attributeList.value.title.gipuzkoa"); 
		    	valueSerie=W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_serie.gipuzkoa");
		    }else if(solicitudPreaviso.getTerritorioCabecera().equals(W83aClsConstantes.CONSTANTE_BIZKAIA)){
		    	valueTitle= W83AProperties.getProperty("w83a","dokusi.attributeList.value.title.bizkaia");
		    	valueSerie=W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_serie.bizkaia");
		    }
			resultado="<attributeList>"
			    +"<attribute>"
				    +"<key>"+W83AProperties.getProperty("w83a","dokusi.attributeList.key.object_name")+"</key>"
				    +"<value>"+nombreFichero+"</value>"
			    +"</attribute>"
			    
			    +"<attribute>"
				    +"<key>"+W83AProperties.getProperty("w83a","dokusi.attributeList.key.title")+"</key>"
				    +"<value>"+valueTitle+"</value>"
			    +"</attribute>"
			    +"<attribute>"
				    +"<key>"+W83AProperties.getProperty("w83a","dokusi.attributeList.key.ejgv_serie")+"</key>"
				    +"<value>"+valueSerie+"</value>"
			    +"</attribute>"
			    +"<attribute>"
				    +"<key>"+W83AProperties.getProperty("w83a","dokusi.attributeList.key.ejgv_origen")+"</key>"
				    +"<value>"+W83AProperties.getProperty("w83a","dokusi.attributeList.value.ejgv_origen.ciudadania")+"</value>"
			    +"</attribute>"
			    +"<attribute>"
				    +"<key>"+W83AProperties.getProperty("w83a","dokusi.attributeList.key.ejgv_departamento")+"</key>"
				    +"<value>"+idDepartamento+"</value>"
				+"</attribute>"
		+"</attributeList>";
		} catch (Exception e) {
			throw new W83aException("Error al generar la lista de atributos para la función de storeDocument.");
		}
		
		return resultado;
	}
	public static String generarDocumentId(String idDokusi, String version)throws W83aException{

		String result="<documentID>"
			    +"<id>"+idDokusi+"</id>"
			    +"<version>"+version+"</version>"
			    +"</documentID>";
		
    	return result;
	}
	public static String generarSignatures(W83AInformacionProcedimiento info, String dniXLNETS, String nameXLNETS, String firma)throws W83aException{
	    String localFirma=firma.replaceAll("<", "&lt;");
	    String result="<signatureList><signature>"
			    +"<signature>"+localFirma+"</signature>"
			    +"<signatureInfoList><signatureInfo>"
				    +"<department>"+info.getIdDepartamento()+"</department>"
				    +"<entity>"+info.getIdEntidad()+"</entity>"
				    +"<responsability>"+"ADMINISTRADOR"+"</responsability>"
				    +"<signerID>"+dniXLNETS+"</signerID>"
				    +"<signerName>"+nameXLNETS+"</signerName>"
			    +"</signatureInfo></signatureInfoList>"
			    +"<format> <name>text</name> <extension>txt</extension><mimeType>text/plain</mimeType></format>"
			    +"</signature></signatureList>";
		
    	return result;
	}
	

}
